package fr.mma.livraison;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.tools.ant.util.ReaderInputStream;

import fr.mma.livraison.controller.Factory;
import fr.mma.livraison.controller.LivraisonController;
import fr.mma.livraison.controller.PortailParentReader;
import fr.mma.livraison.exception.ExceptionFonctionnelle;
import fr.mma.livraison.model.dto.ApplicationDTO;
import fr.mma.livraison.model.dto.LivraisonDTO;
import fr.mma.livraison.model.dto.PomPortailDTO;

public class PomPortailServlet extends HttpServlet {

	/** */
	private static final long serialVersionUID = -3809053552278589784L;

	@Override
	protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
		final String pomPortail = req.getParameter("pomPortail");
		final String identifiant = req.getParameter("id");
		
		if (pomPortail != null && StringUtils.isNumeric(identifiant)) {
			final LivraisonController controller = new LivraisonController();
			
			final LivraisonDTO livraison = Factory.build(controller.getLivraison(Long.valueOf(identifiant)));
			final InputStream input = new ReaderInputStream(new StringReader(pomPortail), "UTF-8");
			final PomPortailDTO portail =  PortailParentReader.getInstance().read(input);
			//On essaye de rajouter de nouvelles applications
			for (ApplicationDTO applicationDTO : portail.getApplicationList()) {
				if(controller.getApplication(applicationDTO.getName()) == null){
					controller.save(applicationDTO);
				}
			}
			controller.ajouterPomPortail(livraison, portail);
			
			try {
				controller.save(livraison);
			} catch (ExceptionFonctionnelle e) {
				resp.sendRedirect("/erreur.html");
			}
			
			resp.sendRedirect("/livraison.html#"+identifiant);
		} else {
			resp.sendRedirect("/erreur.html");
		}
	}
}
